/**
 */
package org.mro.grib.model.files.secondEdition.products.impl;

import java.nio.ByteBuffer;
import java.util.Collection;

import org.eclipse.emf.common.notify.Notification;

import org.eclipse.emf.common.util.EList;

import org.eclipse.emf.ecore.EClass;

import org.eclipse.emf.ecore.impl.ENotificationImpl;

import org.eclipse.emf.ecore.util.EDataTypeUniqueEList;

import org.mro.grib.model.files.secondEdition.products.ProductDefinitionTemplate414;
import org.mro.grib.model.files.secondEdition.products.ProductsPackage;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Product Definition Template414</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getYear <em>Year</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getMonth <em>Month</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getDay <em>Day</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getHour <em>Hour</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getMinute <em>Minute</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getSecond <em>Second</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getNumberOfTimeRangeSpecifications <em>Number Of Time Range Specifications</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getTotalNumberOfDataValuesMissing <em>Total Number Of Data Values Missing</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getOutermostStatisticalProcess <em>Outermost Statistical Process</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getOutermostTypeOfTimeIncrement <em>Outermost Type Of Time Increment</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getOutermostIndicatorOfUnitOfTimeStatisticalProcess <em>Outermost Indicator Of Unit Of Time Statistical Process</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getOutermostLengthOfTheTimeRange <em>Outermost Length Of The Time Range</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getOutermostIndicatorOfUnitOfTimeSuccessiveFields <em>Outermost Indicator Of Unit Of Time Successive Fields</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getOutermostTimeIncrementBetweenSuccessiveFields <em>Outermost Time Increment Between Successive Fields</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getAdditionalStatisticalProcess <em>Additional Statistical Process</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getAdditionalTypeOfTimeIncrement <em>Additional Type Of Time Increment</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getAdditionalIndicatorOfUnitOfTimeStatisticalProcess <em>Additional Indicator Of Unit Of Time Statistical Process</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getAdditionalLengthOfTheTimeRange <em>Additional Length Of The Time Range</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getAdditionalIndicatorOfUnitOfTimeSuccessiveFields <em>Additional Indicator Of Unit Of Time Successive Fields</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate414Impl#getAdditionalTimeIncrementBetweenSuccessiveFields <em>Additional Time Increment Between Successive Fields</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public class ProductDefinitionTemplate414Impl extends ProductDefinitionTemplate44Impl implements ProductDefinitionTemplate414 {
	/**
	 * The default value of the '{@link #getYear() <em>Year</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getYear()
	 * @generated
	 * @ordered
	 */
	protected static final short YEAR_EDEFAULT = 0;

	/**
	 * The cached value of the '{@link #getYear() <em>Year</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getYear()
	 * @generated
	 * @ordered
	 */
	protected short year = YEAR_EDEFAULT;

	/**
	 * The default value of the '{@link #getMonth() <em>Month</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMonth()
	 * @generated
	 * @ordered
	 */
	protected static final byte MONTH_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getMonth() <em>Month</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMonth()
	 * @generated
	 * @ordered
	 */
	protected byte month = MONTH_EDEFAULT;

	/**
	 * The default value of the '{@link #getDay() <em>Day</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDay()
	 * @generated
	 * @ordered
	 */
	protected static final byte DAY_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getDay() <em>Day</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getDay()
	 * @generated
	 * @ordered
	 */
	protected byte day = DAY_EDEFAULT;

	/**
	 * The default value of the '{@link #getHour() <em>Hour</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHour()
	 * @generated
	 * @ordered
	 */
	protected static final byte HOUR_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getHour() <em>Hour</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getHour()
	 * @generated
	 * @ordered
	 */
	protected byte hour = HOUR_EDEFAULT;

	/**
	 * The default value of the '{@link #getMinute() <em>Minute</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMinute()
	 * @generated
	 * @ordered
	 */
	protected static final byte MINUTE_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getMinute() <em>Minute</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getMinute()
	 * @generated
	 * @ordered
	 */
	protected byte minute = MINUTE_EDEFAULT;

	/**
	 * The default value of the '{@link #getSecond() <em>Second</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSecond()
	 * @generated
	 * @ordered
	 */
	protected static final byte SECOND_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getSecond() <em>Second</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getSecond()
	 * @generated
	 * @ordered
	 */
	protected byte second = SECOND_EDEFAULT;

	/**
	 * The default value of the '{@link #getNumberOfTimeRangeSpecifications() <em>Number Of Time Range Specifications</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getNumberOfTimeRangeSpecifications()
	 * @generated
	 * @ordered
	 */
	protected static final byte NUMBER_OF_TIME_RANGE_SPECIFICATIONS_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getNumberOfTimeRangeSpecifications() <em>Number Of Time Range Specifications</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getNumberOfTimeRangeSpecifications()
	 * @generated
	 * @ordered
	 */
	protected byte numberOfTimeRangeSpecifications = NUMBER_OF_TIME_RANGE_SPECIFICATIONS_EDEFAULT;

	/**
	 * The default value of the '{@link #getTotalNumberOfDataValuesMissing() <em>Total Number Of Data Values Missing</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTotalNumberOfDataValuesMissing()
	 * @generated
	 * @ordered
	 */
	protected static final int TOTAL_NUMBER_OF_DATA_VALUES_MISSING_EDEFAULT = 0;

	/**
	 * The cached value of the '{@link #getTotalNumberOfDataValuesMissing() <em>Total Number Of Data Values Missing</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getTotalNumberOfDataValuesMissing()
	 * @generated
	 * @ordered
	 */
	protected int totalNumberOfDataValuesMissing = TOTAL_NUMBER_OF_DATA_VALUES_MISSING_EDEFAULT;

	/**
	 * The default value of the '{@link #getOutermostStatisticalProcess() <em>Outermost Statistical Process</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostStatisticalProcess()
	 * @generated
	 * @ordered
	 */
	protected static final byte OUTERMOST_STATISTICAL_PROCESS_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getOutermostStatisticalProcess() <em>Outermost Statistical Process</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostStatisticalProcess()
	 * @generated
	 * @ordered
	 */
	protected byte outermostStatisticalProcess = OUTERMOST_STATISTICAL_PROCESS_EDEFAULT;

	/**
	 * The default value of the '{@link #getOutermostTypeOfTimeIncrement() <em>Outermost Type Of Time Increment</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostTypeOfTimeIncrement()
	 * @generated
	 * @ordered
	 */
	protected static final byte OUTERMOST_TYPE_OF_TIME_INCREMENT_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getOutermostTypeOfTimeIncrement() <em>Outermost Type Of Time Increment</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostTypeOfTimeIncrement()
	 * @generated
	 * @ordered
	 */
	protected byte outermostTypeOfTimeIncrement = OUTERMOST_TYPE_OF_TIME_INCREMENT_EDEFAULT;

	/**
	 * The default value of the '{@link #getOutermostIndicatorOfUnitOfTimeStatisticalProcess() <em>Outermost Indicator Of Unit Of Time Statistical Process</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostIndicatorOfUnitOfTimeStatisticalProcess()
	 * @generated
	 * @ordered
	 */
	protected static final byte OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getOutermostIndicatorOfUnitOfTimeStatisticalProcess() <em>Outermost Indicator Of Unit Of Time Statistical Process</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostIndicatorOfUnitOfTimeStatisticalProcess()
	 * @generated
	 * @ordered
	 */
	protected byte outermostIndicatorOfUnitOfTimeStatisticalProcess = OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS_EDEFAULT;

	/**
	 * The default value of the '{@link #getOutermostLengthOfTheTimeRange() <em>Outermost Length Of The Time Range</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostLengthOfTheTimeRange()
	 * @generated
	 * @ordered
	 */
	protected static final int OUTERMOST_LENGTH_OF_THE_TIME_RANGE_EDEFAULT = 0;

	/**
	 * The cached value of the '{@link #getOutermostLengthOfTheTimeRange() <em>Outermost Length Of The Time Range</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostLengthOfTheTimeRange()
	 * @generated
	 * @ordered
	 */
	protected int outermostLengthOfTheTimeRange = OUTERMOST_LENGTH_OF_THE_TIME_RANGE_EDEFAULT;

	/**
	 * The default value of the '{@link #getOutermostIndicatorOfUnitOfTimeSuccessiveFields() <em>Outermost Indicator Of Unit Of Time Successive Fields</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostIndicatorOfUnitOfTimeSuccessiveFields()
	 * @generated
	 * @ordered
	 */
	protected static final byte OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS_EDEFAULT = 0x00;

	/**
	 * The cached value of the '{@link #getOutermostIndicatorOfUnitOfTimeSuccessiveFields() <em>Outermost Indicator Of Unit Of Time Successive Fields</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostIndicatorOfUnitOfTimeSuccessiveFields()
	 * @generated
	 * @ordered
	 */
	protected byte outermostIndicatorOfUnitOfTimeSuccessiveFields = OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS_EDEFAULT;

	/**
	 * The default value of the '{@link #getOutermostTimeIncrementBetweenSuccessiveFields() <em>Outermost Time Increment Between Successive Fields</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostTimeIncrementBetweenSuccessiveFields()
	 * @generated
	 * @ordered
	 */
	protected static final int OUTERMOST_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS_EDEFAULT = 0;

	/**
	 * The cached value of the '{@link #getOutermostTimeIncrementBetweenSuccessiveFields() <em>Outermost Time Increment Between Successive Fields</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getOutermostTimeIncrementBetweenSuccessiveFields()
	 * @generated
	 * @ordered
	 */
	protected int outermostTimeIncrementBetweenSuccessiveFields = OUTERMOST_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS_EDEFAULT;

	/**
	 * The cached value of the '{@link #getAdditionalStatisticalProcess() <em>Additional Statistical Process</em>}' attribute list.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAdditionalStatisticalProcess()
	 * @generated
	 * @ordered
	 */
	protected EList<Byte> additionalStatisticalProcess;

	/**
	 * The cached value of the '{@link #getAdditionalTypeOfTimeIncrement() <em>Additional Type Of Time Increment</em>}' attribute list.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAdditionalTypeOfTimeIncrement()
	 * @generated
	 * @ordered
	 */
	protected EList<Byte> additionalTypeOfTimeIncrement;

	/**
	 * The cached value of the '{@link #getAdditionalIndicatorOfUnitOfTimeStatisticalProcess() <em>Additional Indicator Of Unit Of Time Statistical Process</em>}' attribute list.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAdditionalIndicatorOfUnitOfTimeStatisticalProcess()
	 * @generated
	 * @ordered
	 */
	protected EList<Byte> additionalIndicatorOfUnitOfTimeStatisticalProcess;

	/**
	 * The cached value of the '{@link #getAdditionalLengthOfTheTimeRange() <em>Additional Length Of The Time Range</em>}' attribute list.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAdditionalLengthOfTheTimeRange()
	 * @generated
	 * @ordered
	 */
	protected EList<Integer> additionalLengthOfTheTimeRange;

	/**
	 * The cached value of the '{@link #getAdditionalIndicatorOfUnitOfTimeSuccessiveFields() <em>Additional Indicator Of Unit Of Time Successive Fields</em>}' attribute list.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAdditionalIndicatorOfUnitOfTimeSuccessiveFields()
	 * @generated
	 * @ordered
	 */
	protected EList<Byte> additionalIndicatorOfUnitOfTimeSuccessiveFields;

	/**
	 * The cached value of the '{@link #getAdditionalTimeIncrementBetweenSuccessiveFields() <em>Additional Time Increment Between Successive Fields</em>}' attribute list.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #getAdditionalTimeIncrementBetweenSuccessiveFields()
	 * @generated
	 * @ordered
	 */
	protected EList<Integer> additionalTimeIncrementBetweenSuccessiveFields;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ProductDefinitionTemplate414Impl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return ProductsPackage.Literals.PRODUCT_DEFINITION_TEMPLATE414;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public short getYear() {
		return year;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setYear(short newYear) {
		short oldYear = year;
		year = newYear;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__YEAR, oldYear, year));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getMonth() {
		return month;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setMonth(byte newMonth) {
		byte oldMonth = month;
		month = newMonth;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__MONTH, oldMonth, month));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getDay() {
		return day;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setDay(byte newDay) {
		byte oldDay = day;
		day = newDay;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__DAY, oldDay, day));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getHour() {
		return hour;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setHour(byte newHour) {
		byte oldHour = hour;
		hour = newHour;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__HOUR, oldHour, hour));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getMinute() {
		return minute;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setMinute(byte newMinute) {
		byte oldMinute = minute;
		minute = newMinute;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__MINUTE, oldMinute, minute));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getSecond() {
		return second;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setSecond(byte newSecond) {
		byte oldSecond = second;
		second = newSecond;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__SECOND, oldSecond, second));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getNumberOfTimeRangeSpecifications() {
		return numberOfTimeRangeSpecifications;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setNumberOfTimeRangeSpecifications(byte newNumberOfTimeRangeSpecifications) {
		byte oldNumberOfTimeRangeSpecifications = numberOfTimeRangeSpecifications;
		numberOfTimeRangeSpecifications = newNumberOfTimeRangeSpecifications;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__NUMBER_OF_TIME_RANGE_SPECIFICATIONS, oldNumberOfTimeRangeSpecifications, numberOfTimeRangeSpecifications));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public int getTotalNumberOfDataValuesMissing() {
		return totalNumberOfDataValuesMissing;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTotalNumberOfDataValuesMissing(int newTotalNumberOfDataValuesMissing) {
		int oldTotalNumberOfDataValuesMissing = totalNumberOfDataValuesMissing;
		totalNumberOfDataValuesMissing = newTotalNumberOfDataValuesMissing;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__TOTAL_NUMBER_OF_DATA_VALUES_MISSING, oldTotalNumberOfDataValuesMissing, totalNumberOfDataValuesMissing));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getOutermostStatisticalProcess() {
		return outermostStatisticalProcess;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setOutermostStatisticalProcess(byte newOutermostStatisticalProcess) {
		byte oldOutermostStatisticalProcess = outermostStatisticalProcess;
		outermostStatisticalProcess = newOutermostStatisticalProcess;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_STATISTICAL_PROCESS, oldOutermostStatisticalProcess, outermostStatisticalProcess));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getOutermostTypeOfTimeIncrement() {
		return outermostTypeOfTimeIncrement;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setOutermostTypeOfTimeIncrement(byte newOutermostTypeOfTimeIncrement) {
		byte oldOutermostTypeOfTimeIncrement = outermostTypeOfTimeIncrement;
		outermostTypeOfTimeIncrement = newOutermostTypeOfTimeIncrement;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_TYPE_OF_TIME_INCREMENT, oldOutermostTypeOfTimeIncrement, outermostTypeOfTimeIncrement));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getOutermostIndicatorOfUnitOfTimeStatisticalProcess() {
		return outermostIndicatorOfUnitOfTimeStatisticalProcess;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setOutermostIndicatorOfUnitOfTimeStatisticalProcess(byte newOutermostIndicatorOfUnitOfTimeStatisticalProcess) {
		byte oldOutermostIndicatorOfUnitOfTimeStatisticalProcess = outermostIndicatorOfUnitOfTimeStatisticalProcess;
		outermostIndicatorOfUnitOfTimeStatisticalProcess = newOutermostIndicatorOfUnitOfTimeStatisticalProcess;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS, oldOutermostIndicatorOfUnitOfTimeStatisticalProcess, outermostIndicatorOfUnitOfTimeStatisticalProcess));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public int getOutermostLengthOfTheTimeRange() {
		return outermostLengthOfTheTimeRange;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setOutermostLengthOfTheTimeRange(int newOutermostLengthOfTheTimeRange) {
		int oldOutermostLengthOfTheTimeRange = outermostLengthOfTheTimeRange;
		outermostLengthOfTheTimeRange = newOutermostLengthOfTheTimeRange;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_LENGTH_OF_THE_TIME_RANGE, oldOutermostLengthOfTheTimeRange, outermostLengthOfTheTimeRange));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public byte getOutermostIndicatorOfUnitOfTimeSuccessiveFields() {
		return outermostIndicatorOfUnitOfTimeSuccessiveFields;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setOutermostIndicatorOfUnitOfTimeSuccessiveFields(byte newOutermostIndicatorOfUnitOfTimeSuccessiveFields) {
		byte oldOutermostIndicatorOfUnitOfTimeSuccessiveFields = outermostIndicatorOfUnitOfTimeSuccessiveFields;
		outermostIndicatorOfUnitOfTimeSuccessiveFields = newOutermostIndicatorOfUnitOfTimeSuccessiveFields;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS, oldOutermostIndicatorOfUnitOfTimeSuccessiveFields, outermostIndicatorOfUnitOfTimeSuccessiveFields));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public int getOutermostTimeIncrementBetweenSuccessiveFields() {
		return outermostTimeIncrementBetweenSuccessiveFields;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setOutermostTimeIncrementBetweenSuccessiveFields(int newOutermostTimeIncrementBetweenSuccessiveFields) {
		int oldOutermostTimeIncrementBetweenSuccessiveFields = outermostTimeIncrementBetweenSuccessiveFields;
		outermostTimeIncrementBetweenSuccessiveFields = newOutermostTimeIncrementBetweenSuccessiveFields;
		if (eNotificationRequired())
			eNotify(new ENotificationImpl(this, Notification.SET, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS, oldOutermostTimeIncrementBetweenSuccessiveFields, outermostTimeIncrementBetweenSuccessiveFields));
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<Byte> getAdditionalStatisticalProcess() {
		if (additionalStatisticalProcess == null) {
			additionalStatisticalProcess = new EDataTypeUniqueEList<Byte>(Byte.class, this, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_STATISTICAL_PROCESS);
		}
		return additionalStatisticalProcess;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<Byte> getAdditionalTypeOfTimeIncrement() {
		if (additionalTypeOfTimeIncrement == null) {
			additionalTypeOfTimeIncrement = new EDataTypeUniqueEList<Byte>(Byte.class, this, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_TYPE_OF_TIME_INCREMENT);
		}
		return additionalTypeOfTimeIncrement;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<Byte> getAdditionalIndicatorOfUnitOfTimeStatisticalProcess() {
		if (additionalIndicatorOfUnitOfTimeStatisticalProcess == null) {
			additionalIndicatorOfUnitOfTimeStatisticalProcess = new EDataTypeUniqueEList<Byte>(Byte.class, this, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS);
		}
		return additionalIndicatorOfUnitOfTimeStatisticalProcess;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<Integer> getAdditionalLengthOfTheTimeRange() {
		if (additionalLengthOfTheTimeRange == null) {
			additionalLengthOfTheTimeRange = new EDataTypeUniqueEList<Integer>(Integer.class, this, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_LENGTH_OF_THE_TIME_RANGE);
		}
		return additionalLengthOfTheTimeRange;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<Byte> getAdditionalIndicatorOfUnitOfTimeSuccessiveFields() {
		if (additionalIndicatorOfUnitOfTimeSuccessiveFields == null) {
			additionalIndicatorOfUnitOfTimeSuccessiveFields = new EDataTypeUniqueEList<Byte>(Byte.class, this, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS);
		}
		return additionalIndicatorOfUnitOfTimeSuccessiveFields;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EList<Integer> getAdditionalTimeIncrementBetweenSuccessiveFields() {
		if (additionalTimeIncrementBetweenSuccessiveFields == null) {
			additionalTimeIncrementBetweenSuccessiveFields = new EDataTypeUniqueEList<Integer>(Integer.class, this, ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS);
		}
		return additionalTimeIncrementBetweenSuccessiveFields;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object eGet(int featureID, boolean resolve, boolean coreType) {
		switch (featureID) {
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__YEAR:
				return getYear();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__MONTH:
				return getMonth();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__DAY:
				return getDay();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__HOUR:
				return getHour();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__MINUTE:
				return getMinute();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__SECOND:
				return getSecond();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__NUMBER_OF_TIME_RANGE_SPECIFICATIONS:
				return getNumberOfTimeRangeSpecifications();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__TOTAL_NUMBER_OF_DATA_VALUES_MISSING:
				return getTotalNumberOfDataValuesMissing();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_STATISTICAL_PROCESS:
				return getOutermostStatisticalProcess();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_TYPE_OF_TIME_INCREMENT:
				return getOutermostTypeOfTimeIncrement();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS:
				return getOutermostIndicatorOfUnitOfTimeStatisticalProcess();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_LENGTH_OF_THE_TIME_RANGE:
				return getOutermostLengthOfTheTimeRange();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS:
				return getOutermostIndicatorOfUnitOfTimeSuccessiveFields();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS:
				return getOutermostTimeIncrementBetweenSuccessiveFields();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_STATISTICAL_PROCESS:
				return getAdditionalStatisticalProcess();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_TYPE_OF_TIME_INCREMENT:
				return getAdditionalTypeOfTimeIncrement();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS:
				return getAdditionalIndicatorOfUnitOfTimeStatisticalProcess();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_LENGTH_OF_THE_TIME_RANGE:
				return getAdditionalLengthOfTheTimeRange();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS:
				return getAdditionalIndicatorOfUnitOfTimeSuccessiveFields();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS:
				return getAdditionalTimeIncrementBetweenSuccessiveFields();
		}
		return super.eGet(featureID, resolve, coreType);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@SuppressWarnings("unchecked")
	@Override
	public void eSet(int featureID, Object newValue) {
		switch (featureID) {
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__YEAR:
				setYear((Short)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__MONTH:
				setMonth((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__DAY:
				setDay((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__HOUR:
				setHour((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__MINUTE:
				setMinute((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__SECOND:
				setSecond((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__NUMBER_OF_TIME_RANGE_SPECIFICATIONS:
				setNumberOfTimeRangeSpecifications((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__TOTAL_NUMBER_OF_DATA_VALUES_MISSING:
				setTotalNumberOfDataValuesMissing((Integer)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_STATISTICAL_PROCESS:
				setOutermostStatisticalProcess((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_TYPE_OF_TIME_INCREMENT:
				setOutermostTypeOfTimeIncrement((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS:
				setOutermostIndicatorOfUnitOfTimeStatisticalProcess((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_LENGTH_OF_THE_TIME_RANGE:
				setOutermostLengthOfTheTimeRange((Integer)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS:
				setOutermostIndicatorOfUnitOfTimeSuccessiveFields((Byte)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS:
				setOutermostTimeIncrementBetweenSuccessiveFields((Integer)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_STATISTICAL_PROCESS:
				getAdditionalStatisticalProcess().clear();
				getAdditionalStatisticalProcess().addAll((Collection<? extends Byte>)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_TYPE_OF_TIME_INCREMENT:
				getAdditionalTypeOfTimeIncrement().clear();
				getAdditionalTypeOfTimeIncrement().addAll((Collection<? extends Byte>)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS:
				getAdditionalIndicatorOfUnitOfTimeStatisticalProcess().clear();
				getAdditionalIndicatorOfUnitOfTimeStatisticalProcess().addAll((Collection<? extends Byte>)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_LENGTH_OF_THE_TIME_RANGE:
				getAdditionalLengthOfTheTimeRange().clear();
				getAdditionalLengthOfTheTimeRange().addAll((Collection<? extends Integer>)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS:
				getAdditionalIndicatorOfUnitOfTimeSuccessiveFields().clear();
				getAdditionalIndicatorOfUnitOfTimeSuccessiveFields().addAll((Collection<? extends Byte>)newValue);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS:
				getAdditionalTimeIncrementBetweenSuccessiveFields().clear();
				getAdditionalTimeIncrementBetweenSuccessiveFields().addAll((Collection<? extends Integer>)newValue);
				return;
		}
		super.eSet(featureID, newValue);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void eUnset(int featureID) {
		switch (featureID) {
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__YEAR:
				setYear(YEAR_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__MONTH:
				setMonth(MONTH_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__DAY:
				setDay(DAY_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__HOUR:
				setHour(HOUR_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__MINUTE:
				setMinute(MINUTE_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__SECOND:
				setSecond(SECOND_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__NUMBER_OF_TIME_RANGE_SPECIFICATIONS:
				setNumberOfTimeRangeSpecifications(NUMBER_OF_TIME_RANGE_SPECIFICATIONS_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__TOTAL_NUMBER_OF_DATA_VALUES_MISSING:
				setTotalNumberOfDataValuesMissing(TOTAL_NUMBER_OF_DATA_VALUES_MISSING_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_STATISTICAL_PROCESS:
				setOutermostStatisticalProcess(OUTERMOST_STATISTICAL_PROCESS_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_TYPE_OF_TIME_INCREMENT:
				setOutermostTypeOfTimeIncrement(OUTERMOST_TYPE_OF_TIME_INCREMENT_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS:
				setOutermostIndicatorOfUnitOfTimeStatisticalProcess(OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_LENGTH_OF_THE_TIME_RANGE:
				setOutermostLengthOfTheTimeRange(OUTERMOST_LENGTH_OF_THE_TIME_RANGE_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS:
				setOutermostIndicatorOfUnitOfTimeSuccessiveFields(OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS:
				setOutermostTimeIncrementBetweenSuccessiveFields(OUTERMOST_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS_EDEFAULT);
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_STATISTICAL_PROCESS:
				getAdditionalStatisticalProcess().clear();
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_TYPE_OF_TIME_INCREMENT:
				getAdditionalTypeOfTimeIncrement().clear();
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS:
				getAdditionalIndicatorOfUnitOfTimeStatisticalProcess().clear();
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_LENGTH_OF_THE_TIME_RANGE:
				getAdditionalLengthOfTheTimeRange().clear();
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS:
				getAdditionalIndicatorOfUnitOfTimeSuccessiveFields().clear();
				return;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS:
				getAdditionalTimeIncrementBetweenSuccessiveFields().clear();
				return;
		}
		super.eUnset(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean eIsSet(int featureID) {
		switch (featureID) {
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__YEAR:
				return year != YEAR_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__MONTH:
				return month != MONTH_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__DAY:
				return day != DAY_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__HOUR:
				return hour != HOUR_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__MINUTE:
				return minute != MINUTE_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__SECOND:
				return second != SECOND_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__NUMBER_OF_TIME_RANGE_SPECIFICATIONS:
				return numberOfTimeRangeSpecifications != NUMBER_OF_TIME_RANGE_SPECIFICATIONS_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__TOTAL_NUMBER_OF_DATA_VALUES_MISSING:
				return totalNumberOfDataValuesMissing != TOTAL_NUMBER_OF_DATA_VALUES_MISSING_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_STATISTICAL_PROCESS:
				return outermostStatisticalProcess != OUTERMOST_STATISTICAL_PROCESS_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_TYPE_OF_TIME_INCREMENT:
				return outermostTypeOfTimeIncrement != OUTERMOST_TYPE_OF_TIME_INCREMENT_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS:
				return outermostIndicatorOfUnitOfTimeStatisticalProcess != OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_LENGTH_OF_THE_TIME_RANGE:
				return outermostLengthOfTheTimeRange != OUTERMOST_LENGTH_OF_THE_TIME_RANGE_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS:
				return outermostIndicatorOfUnitOfTimeSuccessiveFields != OUTERMOST_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__OUTERMOST_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS:
				return outermostTimeIncrementBetweenSuccessiveFields != OUTERMOST_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS_EDEFAULT;
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_STATISTICAL_PROCESS:
				return additionalStatisticalProcess != null && !additionalStatisticalProcess.isEmpty();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_TYPE_OF_TIME_INCREMENT:
				return additionalTypeOfTimeIncrement != null && !additionalTypeOfTimeIncrement.isEmpty();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_INDICATOR_OF_UNIT_OF_TIME_STATISTICAL_PROCESS:
				return additionalIndicatorOfUnitOfTimeStatisticalProcess != null && !additionalIndicatorOfUnitOfTimeStatisticalProcess.isEmpty();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_LENGTH_OF_THE_TIME_RANGE:
				return additionalLengthOfTheTimeRange != null && !additionalLengthOfTheTimeRange.isEmpty();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_INDICATOR_OF_UNIT_OF_TIME_SUCCESSIVE_FIELDS:
				return additionalIndicatorOfUnitOfTimeSuccessiveFields != null && !additionalIndicatorOfUnitOfTimeSuccessiveFields.isEmpty();
			case ProductsPackage.PRODUCT_DEFINITION_TEMPLATE414__ADDITIONAL_TIME_INCREMENT_BETWEEN_SUCCESSIVE_FIELDS:
				return additionalTimeIncrementBetweenSuccessiveFields != null && !additionalTimeIncrementBetweenSuccessiveFields.isEmpty();
		}
		return super.eIsSet(featureID);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public String toString() {
		if (eIsProxy()) return super.toString();

		StringBuffer result = new StringBuffer(super.toString());
		result.append(" (year: "); //$NON-NLS-1$
		result.append(year);
		result.append(", month: "); //$NON-NLS-1$
		result.append(month);
		result.append(", day: "); //$NON-NLS-1$
		result.append(day);
		result.append(", hour: "); //$NON-NLS-1$
		result.append(hour);
		result.append(", minute: "); //$NON-NLS-1$
		result.append(minute);
		result.append(", second: "); //$NON-NLS-1$
		result.append(second);
		result.append(", numberOfTimeRangeSpecifications: "); //$NON-NLS-1$
		result.append(numberOfTimeRangeSpecifications);
		result.append(", totalNumberOfDataValuesMissing: "); //$NON-NLS-1$
		result.append(totalNumberOfDataValuesMissing);
		result.append(", outermostStatisticalProcess: "); //$NON-NLS-1$
		result.append(outermostStatisticalProcess);
		result.append(", outermostTypeOfTimeIncrement: "); //$NON-NLS-1$
		result.append(outermostTypeOfTimeIncrement);
		result.append(", outermostIndicatorOfUnitOfTimeStatisticalProcess: "); //$NON-NLS-1$
		result.append(outermostIndicatorOfUnitOfTimeStatisticalProcess);
		result.append(", outermostLengthOfTheTimeRange: "); //$NON-NLS-1$
		result.append(outermostLengthOfTheTimeRange);
		result.append(", outermostIndicatorOfUnitOfTimeSuccessiveFields: "); //$NON-NLS-1$
		result.append(outermostIndicatorOfUnitOfTimeSuccessiveFields);
		result.append(", outermostTimeIncrementBetweenSuccessiveFields: "); //$NON-NLS-1$
		result.append(outermostTimeIncrementBetweenSuccessiveFields);
		result.append(", additionalStatisticalProcess: "); //$NON-NLS-1$
		result.append(additionalStatisticalProcess);
		result.append(", additionalTypeOfTimeIncrement: "); //$NON-NLS-1$
		result.append(additionalTypeOfTimeIncrement);
		result.append(", additionalIndicatorOfUnitOfTimeStatisticalProcess: "); //$NON-NLS-1$
		result.append(additionalIndicatorOfUnitOfTimeStatisticalProcess);
		result.append(", additionalLengthOfTheTimeRange: "); //$NON-NLS-1$
		result.append(additionalLengthOfTheTimeRange);
		result.append(", additionalIndicatorOfUnitOfTimeSuccessiveFields: "); //$NON-NLS-1$
		result.append(additionalIndicatorOfUnitOfTimeSuccessiveFields);
		result.append(", additionalTimeIncrementBetweenSuccessiveFields: "); //$NON-NLS-1$
		result.append(additionalTimeIncrementBetweenSuccessiveFields);
		result.append(')');
		return result.toString();
	}

	/* (non-Javadoc)
	 * @see org.mro.grib.model.files.secondEdition.products.impl.ProductDefinitionTemplate44Impl#initialise(java.nio.ByteBuffer)
	 */
	@Override
	public void initialise(ByteBuffer buffer) {
		super.initialise(buffer);
		year = buffer.getShort();
		month = buffer.get();
		day = buffer.get();
		hour = buffer.get();
		minute = buffer.get();
		second = buffer.get();
		numberOfTimeRangeSpecifications = buffer.get();
		totalNumberOfDataValuesMissing = buffer.getInt();
		outermostStatisticalProcess = buffer.get();
		outermostTypeOfTimeIncrement = buffer.get();
		outermostIndicatorOfUnitOfTimeStatisticalProcess = buffer.get();
		outermostLengthOfTheTimeRange = buffer.getInt();
		outermostIndicatorOfUnitOfTimeSuccessiveFields = buffer.get();
		outermostTimeIncrementBetweenSuccessiveFields = buffer.getInt();
		if (numberOfTimeRangeSpecifications > 1) {
			for (int i = 0; i < numberOfTimeRangeSpecifications; i++) {
				additionalStatisticalProcess.add(Byte.valueOf(buffer.get()));
				additionalTypeOfTimeIncrement.add(Byte.valueOf(buffer.get()));
				additionalIndicatorOfUnitOfTimeStatisticalProcess.add(Byte.valueOf(buffer.get()));
				additionalLengthOfTheTimeRange.add(Integer.valueOf(buffer.getInt()));
				additionalIndicatorOfUnitOfTimeSuccessiveFields.add(Byte.valueOf(buffer.get()));
				additionalTimeIncrementBetweenSuccessiveFields.add(Integer.valueOf(buffer.getInt()));
			}
		}
	}
	
} //ProductDefinitionTemplate414Impl
